package route

import (
	"log/slog"
	"os"
	"path/filepath"
	"time"

	"gitee.com/jiebaiyou/formflow/api/controller"
	"gitee.com/jiebaiyou/formflow/bootstrap"
	"gitee.com/jiebaiyou/formflow/pkg/storage/redis"
	"gitee.com/jiebaiyou/formflow/pkg/storage/sqlite"
	"gitee.com/jiebaiyou/formflow/service"
	"github.com/gin-gonic/gin"
)

// NewFrontendRouter 创建前端路由
// 处理静态资源、根路由和SPA路由重定向
func NewFrontendRouter(env *bootstrap.Config, timeout time.Duration, db sqlite.DB, cache redis.Database, engine *gin.Engine) {
	// 创建系统控制器用于处理API 404
	sc := &controller.SystemController{
		SystemService: service.NewSystemService(timeout),
	}

	// 前端静态文件处理
	webDir := "./web"
	if _, err := os.Stat(webDir); err == nil {
		// 1. 配置静态资源路由
		// 图标文件处理, 使用根目录中的favicon.ico
		engine.StaticFile("/favicon.ico", "favicon.ico")
		// 配置静态资源目录
		engine.Static("/assets", filepath.Join(webDir, "assets"))

		// 2. 配置根路由处理
		engine.GET("/", func(c *gin.Context) {
			c.File(filepath.Join(webDir, "index.html"))
		})

		// 3. 配置NoRoute处理 - 支持前端路由和API 404
		engine.NoRoute(func(c *gin.Context) {
			// 如果是API请求, 则返回404
			if len(c.Request.URL.Path) >= 4 && c.Request.URL.Path[:4] == "/api" {
				sc.NotFound(c)
				return
			}
			// 否则返回前端index.html, 支持前端路由
			c.File(filepath.Join(webDir, "index.html"))
		})
	} else {
		// 前端静态文件目录不存在, 记录警告
		slog.Warn("前端静态文件目录不存在, 前端路由未配置", slog.String("webDir", webDir), slog.String("error", err.Error()))
		// 所有非API请求返回404
		engine.NoRoute(sc.NotFound)
	}
}
